home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / sun3.md / machTypes.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  9KB  |  310 lines

  1. /*
  2.  * machTypes.h --
  3.  *
  4.  *     Exported types for the mach module.
  5.  *
  6.  * Copyright 1989 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/sun3.md/machTypes.h,v 1.1 90/09/11 10:24:01 mendel Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _MACHTYPES
  19. #define _MACHTYPES
  20.  
  21. #ifdef KERNEL
  22. #include "devAddrs.h"
  23. #include "machConst.h"
  24. #include "user/fmt.h"
  25. #else
  26. #include <kernel/devAddrs.h>
  27. #include <kernel/machConst.h>
  28. #include <fmt.h>
  29. #endif
  30.  
  31. /*
  32.  * The state of each processor: user mode or kernel mode.
  33.  */
  34. typedef enum {
  35.     MACH_USER,
  36.     MACH_KERNEL
  37. } Mach_ProcessorStates;
  38.  
  39.  
  40. /*
  41.  * The format for the vector offset register.
  42.  */
  43. typedef struct {
  44.     unsigned    int    stackFormat:4;        /* Format of the stack */
  45.     unsigned    int              :2;        /* Filler */
  46.     unsigned    int    vectorOffset:10;    /* Vector offset */
  47. } Mach_VOR;
  48.     
  49. /*
  50.  * The format for the special status word.
  51.  */
  52. typedef    struct {
  53.     unsigned     int     rerun: 1,     /* Rerun bus cycle (0 = processor
  54.                         rerun, 1 = software rerun) */
  55.                 fill1: 1,     /* Reserved */
  56.                 ifetch: 1,     /* Instruction fetch to instruction
  57.                         buffer (1 = true) */
  58.             dfetch: 1,     /* Data fetch to the data input
  59.                         buffer (1 = true) */
  60.             readModWrite: 1, /* Read-Modify-Write cycle */
  61.                 highByte: 1,     /* High byte transfer */
  62.             byteTrans: 1,     /* Byte transfer flag */
  63.                 readWrite: 1,     /* Read/Write flag (0 = write, 
  64.                         1 = read) */
  65.                 fill2: 4,     /* Reserved */
  66.                 funcCode : 4;     /* The function code */
  67. } Mach_SpecStatWord;
  68.  
  69. /*
  70.  * 68020 stack formats are defined in "MC68020 32-Bit Microprocessor User's 
  71.  * Manual" on pages 6-19 to 6-24.  68010 stack formats are defined in 
  72.  * "MC68000  16/32-Bit Microprocessor Programmers Reference Manual" on pages
  73.  * 33 to 48.
  74.  */
  75.  
  76. #ifdef sun3
  77. /*
  78.  * Address and bus error info that is stored on the stack for a  68020 short
  79.  * bus or address fault.
  80.  */
  81. typedef struct {
  82.     unsigned    int    :16;
  83.     Mach_SpecStatWord    specStatWord;    
  84.     short        pipeStageC;
  85.     short        pipeStageB;
  86.     int            faultAddr;
  87.     unsigned     int    :16;
  88.     unsigned     int    :16;
  89.     int            dataOutBuf;
  90.     unsigned     int    :16;
  91.     unsigned     int    :16;
  92. } Mach_ShortAddrBusErr;
  93.  
  94. /*
  95.  * Address and bus error info that is stored on the stack for a 68020 long
  96.  * bus or address fault.
  97.  */
  98. typedef struct {
  99.     unsigned    int    :16;
  100.     Mach_SpecStatWord    specStatWord;    
  101.     short        pipeStageC;
  102.     short        pipeStageB;
  103.     int            faultAddr;
  104.     unsigned     int    int1;
  105.     int            dataOutBuf;
  106.     unsigned    int    int2[2];
  107.     int            stageBAddr;
  108.     unsigned     int    int3;
  109.     int            dataInBuf;
  110.     unsigned    int    int4[11];
  111. } Mach_LongAddrBusErr;
  112.  
  113. /*
  114.  * The default stack is the long one.  Anyone who actually plays with these
  115.  * stacks will have to look at the exception type and figure things out
  116.  * for themselves.
  117.  */
  118. typedef    Mach_LongAddrBusErr    Mach_AddrBusErr;
  119.  
  120. /*
  121.  * The structure of the exception stack
  122.  */
  123. typedef struct {
  124.     short        statusReg;        /* Status register */
  125.     int            pc;            /* Program counter */
  126.     Mach_VOR        vor;            /* The vector offset register */
  127.     union {
  128.     int        instrAddr;        /* Instruction that caused
  129.                          * the fault. */
  130.     Mach_AddrBusErr    addrBusErr;        /* Address or bus error info */
  131.     } tail;
  132. } Mach_ExcStack;
  133.  
  134. #else
  135. /*
  136.  * Address and bus error info that is stored on the stack.
  137.  */
  138. typedef struct {
  139.     Mach_SpecStatWord    specStatWord;    
  140.     int            faultAddr;
  141.     unsigned     int    :16;
  142.     short        dataOutBuf;
  143.     unsigned     int    :16;
  144.     short        dataInBuf;
  145.     unsigned     int    :16;
  146.     short        instInBuf;
  147.     short        internal[16];
  148. } Mach_AddrBusErr;
  149.  
  150. /*
  151.  * The structure of the exception stack
  152.  */
  153. typedef struct {
  154.     short        statusReg;        /* Status register */
  155.     int            pc;            /* Program counter */
  156.     Mach_VOR        vor;            /* The vector offset register */
  157.     union {
  158.     Mach_AddrBusErr    addrBusErr;        /* Address or bus error info */
  159.     } tail;
  160. } Mach_ExcStack;
  161.  
  162. #endif
  163.  
  164. /*
  165.  * Bus error register 
  166.  */
  167. #ifdef sun3
  168. typedef struct {
  169.     unsigned    int    fill:24,    /* Filler to make it a long. */
  170.             pageInvalid: 1,    /* The page accessed did not have the
  171.                        valid bit set. */
  172.             protError: 1,    /* Protection error. */
  173.             timeOut: 1,    /* Timeout error. */
  174.             vmeBusErr: 1,    /* VME bus error. */
  175.             fpaBusErr: 1,    /* FPA bus error. */
  176.             fpaEnErr: 1,    /* FPA Enable error. */
  177.             res1:1,        /* Reserved. */
  178.             watchdog:1;    /* Watchdog or user reset. */
  179. } Mach_BusErrorReg;
  180. #else
  181. typedef struct {
  182.     unsigned    int    fill:16,    /* Filler to make it a long. */
  183.             res1:8,        /* Reserved */
  184.             resident:1,    /* Valid bit set */
  185.             busErr:1,    /* System bus error */
  186.             res2:2,        /* Reserved */
  187.             protErr:1,    /* Protection error */
  188.             timeOut:1,    /* Timeout error */
  189.             parErrU:1,    /* Parity error upper byte */
  190.             parErrL:1;    /* Parity error lower byte */
  191. } Mach_BusErrorReg;
  192.  
  193. #endif
  194.  
  195. /*
  196.  * State for each process.
  197.  *
  198.  * IMPORTANT NOTE: If the order or size of fields in these structures change
  199.  *           then the constants which give the offsets must be
  200.  *           changed in "machConst.h".
  201.  */
  202.  
  203. /*
  204.  * The register state of a user process which is passed to debuggers.
  205.  */
  206. typedef struct {
  207.     int            regs[MACH_NUM_GPRS];    /* General purpose registers.*/
  208.     int            pc;            /* The program counter. */
  209.     int            statusReg;        /* The status register. */
  210. } Mach_RegState;
  211.  
  212. #ifdef sun3
  213. /*
  214.  * The structure of the fpu state frames is described in
  215.  * section 6.4.2 of the Motorola 68881/2 User's Manual.
  216.  */
  217. struct fpuState {
  218.     unsigned char version;
  219.     unsigned char state;
  220.     unsigned short xxx1;
  221.     unsigned long  xxx2[(MACH_FP_STATE_SIZE/4) - 1];
  222. };
  223.  
  224. #define     MACH_68881_IDLE_STATE     0x18
  225. #define     MACH_68882_IDLE_STATE     0x38
  226. #define     MACH_68881_BUSY_STATE     0xb4
  227. #define     MACH_68882_BUSY_STATE     0xd4
  228.  
  229. extern const unsigned long      mach68881Present;
  230. extern const unsigned long      mach68881NullState;
  231. extern const unsigned char      mach68881Version;
  232. extern const struct fpuState    mach68881IdleState;
  233. #endif
  234.  
  235. /*
  236.  * The user state for a process.
  237.  */
  238. typedef struct {
  239.     Address        userStackPtr;        /* The user stack pointer */
  240.     int            trapRegs[MACH_NUM_GPRS];/* General purpose registers.*/
  241.     Mach_ExcStack    *excStackPtr;        /* The exception stack */
  242.     int            lastSysCall;        /* Last system call. */
  243. #ifdef sun3
  244.     long    trapFpRegs[MACH_NUM_FPRS][3];       /* Floating point registers */
  245.     long    trapFpCtrlRegs[3];                  /* fpu control registers */
  246.     struct fpuState trapFpuState;               /* internal state of the fpu*/
  247. #endif
  248. } Mach_UserState;
  249.  
  250. /*
  251.  * The kernel and user state for a process.
  252.  */
  253. typedef struct Mach_State {
  254.     Mach_UserState  userState;                /* User state for a process. */
  255.     long     switchRegs[MACH_NUM_GPRS];     /* Where registers are saved
  256.                          * and restored to/from during
  257.                          * context switches. */
  258.     Address      kernStackStart;        /* Address of the beginning of
  259.                          * the kernel stack. */
  260.     int             sigExcStackSize;            /* Amount of valid data in the
  261.                          * signal exception stack. */
  262.     Mach_ExcStack   sigExcStack;        /* Place to store sig exception 
  263.                          * stack on return from signal
  264.                          * handler.*/
  265. #if 0
  266.     long  switchFpRegs[MACH_NUM_FPRS][3];       /* Where fpu registers are
  267.                                                  * saved and restored to/from
  268.                          * during context switches. */
  269.     long  switchFpCtrlRegs[3];                  /* fpu control registers */
  270.     struct fpuState switchFpuState;             /* internal state of the fpu*/
  271. #endif
  272. } Mach_State;
  273.  
  274. /*
  275.  * The stack that is created when a trap occurs.   If you change the size
  276.  * of this structure then you must also change the MACH_TRAP_INFO_SIZE constant
  277.  * in machConst.h.
  278.  */
  279. typedef struct {
  280.     int            trapType;    /* Type of trap. */
  281.     Mach_BusErrorReg    busErrorReg;    /* Bus error register at time of trap.*/
  282.     int            tmpRegs[4];    /* The tmp registers d0, d1, a0 and 
  283.                      * a1.*/
  284.     Mach_ExcStack    excStack;    /* The exception stack. */
  285. } Mach_TrapStack;
  286.  
  287. /*
  288.  * The stack that is created when an interrupt occurs.
  289.  */
  290. typedef struct {
  291.     int            tmpRegs[4];    /* The tmp registers d0, d1, a0 and 
  292.                      * a1.*/
  293.     Mach_ExcStack    excStack;    /* The exception stack. */
  294. } Mach_IntrStack;
  295.  
  296. /*
  297.  * The machine dependent signal structure.
  298.  */
  299. typedef struct {
  300.     int              trapInst;    /* The trap instruction that is
  301.                      * executed upon return. */
  302.     Mach_UserState    userState;    /* The user process machine state
  303.                      * info. */
  304.     Mach_ExcStack    excStack;    /* The exception stack that would
  305.                      * have been restored if this signal
  306.                      * were not taken. */
  307. } Mach_SigContext;
  308.  
  309. #endif /* _MACHTYPES */
  310.